### Python 模块
# 在前面的几个章节中我们基本上是用 python 解释器来编程，如果你从 Python 解释器退出再进入，那么你定义的所有的方法和变量就都消失了。
# 为此 Python 提供了一个办法，把这些定义存放在文件中，为一些脚本或者交互式的解释器实例使用，这个文件被称为模块。
# 模块是一个包含所有你定义的函数和变量的文件，其后缀名是.py。模块可以被别的程序引入，以使用该模块中的函数等功能。这也是使用 python 标准库的方法。
# 下面是一个使用 python 标准库中模块的例子。

#！ usr/bin/env python
import sys                      # import sys 引入 python 标准库中的 sys.py 模块；这是引入某一模块的方法。


print('命令行参数如下：')
for i in sys.argv:              # sys.argv 是一个包含命令行参数的列表
    print(i)
print('')
# print('Python 的路径为:',sys.path)            # sys.path 包含了一个 Python 解释器自动查找所需模块的路径的列表


### import 语句
# 想使用 Python 源文件，只需在另一个源文件里执行 import 语句，语法如下：
# import module1[, module2[,... moduleN]
# 当解释器遇到 import 语句，如果模块在当前的搜索路径就会被导入。
# 搜索路径是一个解释器会先进行搜索的所有目录的列表。如想要导入模块 support，需要把命令放在脚本的顶端：

# def print_fun( par ):
#     print('Hello:', par)
#     return

### test13.py 中引入 support.py 模块
import support   # 导入模块

support.print_fun('Tom')

### 从不同目录中调用模块
import sys
# sys.path.append('d:\\Users\\Administrator\\Desktop\\python-demo\\python\\demo\\11.Python 面向对象')
# from test11 import Finbon
# import test11

# test11.Finbon(10)


### from … import * 语句
# 把一个模块的所有内容全都导入到当前的命名空间也是可行的，只需使用如下声明



#### __name__属性
# 一个模块被另一个程序第一次引入时，其主程序将运行。如果我们想在模块被引入时，模块中的某一程序块不执行，我们可以用__name__属性来使该程序块仅在该模块自身运行时执行


# if __name__ == '__main__':    # 被调用模块的方法中使用这个条件，调用模块即无法调用
#     print('程序自身在运行')
# else:
#     print('我来自另一个模块 ')



### dir() 函数
# 内置的函数 dir() 可以找到模块内定义的所有名称。以一个字符串列表的形式返回:
# dir(test11)
dir(sys)

# 如果没有给定参数，那么 dir() 函数会罗列出当前定义的所有名称
a = [1,2,3,4]
print('dir()',dir())



### 包
sys.path.append('d:\\Users\\Administrator\\Desktop\\python-demo\\python\\demo')
from exmaple.test import printfunc

printfunc()



